package com.meatball.workflow.controller

import com.meatball.workflow.service.WorkflowService
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
import io.swagger.v3.oas.annotations.Parameters
import io.swagger.v3.oas.annotations.enums.ParameterIn
import io.swagger.v3.oas.annotations.tags.Tag
import org.activiti.engine.repository.Deployment
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.*
import org.springframework.web.multipart.MultipartFile

/**
 * TODO 工作流控制层
 *
 * @author 张翔宇
 * @since 2024年3月15日
 */
@Tag(name = "工作流")
@RestController
@RequestMapping("/workflow")
class WorkflowController (private val workflowService: WorkflowService) {
    /**
     * TODO 上传部署文件
     *
     * @param processFile 要上传和部署的文件
     * @param processName 部署的流程的名称. 如果为 null，则使用文件的原始名称
     * @return 部署的信息.
     */
    @Operation(summary = "上传部署文件")
    @PostMapping("/uploadFileAndDeployment", consumes =[MediaType.MULTIPART_FORM_DATA_VALUE] )
    fun uploadFileAndDeployment(
            @Parameter(description = "要上传和部署的文件") @RequestPart processFile: MultipartFile,
            @Parameter(description = "部署的流程的名称(如果为 null，则使用文件的原始名称)", example = "请假流程") processName: String?
    ) : Deployment {
        return workflowService.uploadFileAndDeployment(processFile, processName)
    }
}